#include "systick_timer.h"
#include <libopencm3/stm32/rcc.h>

// 延时计数变量，类型改为 uint64_t
volatile uint64_t systick_counter = 0;
// 定时周期，单位为 ms
static uint32_t period_ms = 1000;

// SysTick 中断处理函数
void sys_tick_handler(void) {
    systick_counter++;
    // 注释掉原有的重置逻辑，让其一直累加
    //    if (systick_counter >= period_ms) {
    //        systick_counter = 0;
    //    }
}

// 初始化 SysTick 定时器
void systick_timer_init(uint32_t period) {
    period_ms = period;
    // 设置 SysTick 时钟源为处理器时钟
    STK_CSR |= STK_CSR_CLKSOURCE_AHB;
    // 设置 SysTick 中断周期为 1ms
    systick_set_reload(rcc_ahb_frequency / 1000 - 1);
    // 使能 SysTick 定时器和中断
    STK_CSR |= (STK_CSR_TICKINT | STK_CSR_ENABLE);
    systick_counter = 0;
}

// 获取当前计时值
uint64_t systick_timer_get_count(void) {
    return systick_counter;
}

// 重置计时值
void systick_timer_reset_count(void) {
    systick_counter = 0;
}